Applied upstream patch (in conjunction with
5113964):
* process.c (allocate_pty) [PTY_OPEN]: Set fd's FD_CLOEXEC flag.
We can't portably rely on PTY_OPEN doing that, even if
it calls posix_openpt with O_CLOEXEC.
Origin: upstream, commit:
5113963,
57c5937ff85bce49f9dc8f4c66851620416bdc07
Added-by: Rob Browning <rlb@defaultvalue.org>
Provided-By: Paul Eggert <eggert@cs.ucla.edu>
Bug: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=15129
+2013-08-21 Paul Eggert <eggert@cs.ucla.edu>
+
+ * process.c (allocate_pty) [PTY_OPEN]: Set fd's FD_CLOEXEC flag.
+ We can't portably rely on PTY_OPEN doing that, even if
+ it calls posix_openpt with O_CLOEXEC.
+
2013-03-11 Glenn Morris <rgm@gnu.org>
* Version 24.3 released.
if (fd >= 0)
{
+#ifdef PTY_OPEN
+ /* Set FD's close-on-exec flag. This is needed even if
+ PT_OPEN calls posix_openpt with O_CLOEXEC, since POSIX
+ doesn't require support for that combination.
+ Multithreaded platforms where posix_openpt ignores
+ O_CLOEXEC (or where PTY_OPEN doesn't call posix_openpt)
+ have a race condition between the PTY_OPEN and here. */
+ fcntl (fd, F_SETFD, FD_CLOEXEC);
+#endif
/* check to make certain that both sides are available
this avoids a nasty yet stupid bug in rlogins */
#ifdef PTY_TTY_NAME_SPRINTF